Expressでrouterで正規表現を用いてURLを指定し、そのパラメータを取得する
はじめに
node.jsのフレームワークであるexpressを用いることで、
容易にWebアプリケーションの構築を行うことができます。
今回はExpressを用いた際に、router内での正規表現を用いたURLの指定とそのパラメータの取得方法を紹介します。
前提条件
検証した環境は以下の環境になります。
node.js | v0.10.26 |
以下のURL設計でアクセスするものとします。
アクセスURL | 内容 |
---|---|
/user | ユーザー一覧を表示 |
/user/:id(:idは数字とする。) | ユーザー情報表示 |
/user/regist | ユーザー登録 |
ひな形を作成する
expressでアプリケーションを作成する際に、expressのみをインストールした環境でコマンドを実行しようとするとエラーになる場合があります。
$ express zsh: command not found: express
これは、expressのひな形生成が別のパッケージになったのが原因です。
ひな形生成のパッケージ名はexpress-generatorになります。
npm install -g express-generator express -e expressSample cd expressSample npm install
routerの実装
ひな形で生成された/router/user.jsをもとに実装を進めていきます。
routes/users.js
var express = require('express'); var router = express.Router(); router.get('/', function(req, res) { res.send('respond user List'); }); router.get('/:id', function(req, res) { res.send('respond user Info userid:' + req.params.id); }); router.get('/regist', function(req, res) { res.send('respond user Regist'); }); module.exports = router;
動作確認
実装した内容を確認します。
$ npm start (別シェルを立ち上げます。) $ curl http://localhost:3000/users/ respond user List% $ curl http://localhost:3000/users/1 respond user Info userid:1% $ curl http://localhost:3000/users/2 respond user Info userid:2% $ curl http://localhost:3000/users/3 respond user Info userid:3% $ curl http://localhost:3000/users/regist respond user Info userid:regist%
/users/registへのアクセスが/users/:idのアクセスとして処理されています。
正規表現でregistとそれ以外のアクセスを振り分けを行います。
修正
ユーザーのidを正規表現で振り分けを行うように修正します。
routes/users.js
var express = require('express'); var router = express.Router(); router.get('/', function(req, res) { res.send('respond user List'); }); router.get('/:id(\\d+)', function(req, res) { res.send('respond user Info userid:' + req.params.id); }); router.get('/regist', function(req, res) { res.send('respond user Regist'); }); module.exports = router;
修正版動作確認
$ curl http://localhost:3000/users/3 respond user Info userid:3% $ curl http://localhost:3000/users/regist respond user Regist%
正しくユーザー表示と登録が振り分けられていることが確認できました。
参考サイト
regex - Regular Expression in Node.js Express Router - Stack Overflow